home *** CD-ROM | disk | FTP | other *** search
- /*
- RT-11 Adapter Package for CP/M
-
- Rev. 1.0 -- July 1980
-
- Rev. 1.1 -- March 1981 consisting of adding a valid system date
- word to all files placed on the RT-11 disk and
- putting the volume ID on a disk when the directory
- is initialized. This will keep RT-11 versions
- later than V02C from choking.
-
- copyright (c) 1980, William C. Colley, III
-
- This group of functions implements enough of RT-11 to allow the rest of
- the package to work. The functions are built and named as per the
- RT-11 Software Support Manual for version 2C of RT-11.
- */
-
- #include "RT11.H"
-
- /*
- Routine to return the size of a CP/M file. This allows one to seek the
- appropriate size hole on the RT-11 disk. The size is in 512-byte blocks.
- Any size over 501 is impossible as there are not that many blocks on a
- disk. Larger sizes denote file not found.
- */
-
- filesize(filename)
- char *filename;
- {
- int size;
- char fcb[36];
- if (setfcb(fcb,filename) || bdos(OPEN_FILE,fcb) == 255) return 1000;
- size = fcb[15];
- while (fcb[15] == 0x80)
- {
- ++fcb[12];
- fcb[32] = 0;
- if (bdos(OPEN_FILE,fcb) == 255) break;
- size += fcb[15];
- }
- return size % 4 ? size / 4 + 1 : size / 4;
- }
-
- /*
- Routine to convert a number from 0 to 12 into a month name.
- */
-
- getmon(mnum,buffer)
- int mnum;
- char *buffer;
- {
- switch(mnum)
- {
- case 1: strcpy(buffer,"JAN"); break;
- case 2: strcpy(buffer,"FEB"); break;
- case 3: strcpy(buffer,"MAR"); break;
- case 4: strcpy(buffer,"APR"); break;
- case 5: strcpy(buffer,"MAY"); break;
- case 6: strcpy(buffer,"JUN"); break;
- case 7: strcpy(buffer,"JUL"); break;
- case 8: strcpy(buffer,"AUG"); break;
- case 9: strcpy(buffer,"SEP"); break;
- case 10: strcpy(buffer,"OCT"); break;
- case 11: strcpy(buffer,"NOV"); break;
- case 12: strcpy(buffer,"DEC"); break;
- default: strcpy(buffer," "); break;
- }
- }
-
- /*
- Routine to get a command from the user.
- */
-
- getcom()
- {
- char temp[20];
- puts("\nCommand? ");
- gets(temp);
- return toupper(temp[0]);
- }
-
- /*
- Routine to quiz the user for an RT-11 file name. He gets prompted with
- the string prompt and quizzed until he enters a valid name. The routine
- returns the name in the array of int, and a value of 0 if the name is
- null, 1 otherwise.
- */
-
- get_RT_name(prompt,file_name)
- char *prompt;
- int *file_name;
- {
- puts(prompt);
- while (!getfd(file_name))
- {
- puts("Error -- illegal file name. Try again. ");
- }
- if (file_name[0] == 0 && file_name[1] == 0 && file_name[2] == 0)
- return 0;
- return 1;
- }
-
- /*
- Routine to convert the name of an RT-11 file from radix 50 into an
- ASCII string. The file name comes over in the int array file_name
- and the string goes back in the char array file_string. Illegal
- characters show up as *'s. The function returns a pointer to the
- string.
- */
-
- sprint_name(file_name,file_string)
- char *file_string;
- int *file_name;
- {
- int i, j;
- unsigned t;
- file_string[10] = '\0';
- file_string[6] = '.';
- for (i = 0; i < 3; i++)
- {
- t = file_name[i];
- for (j = 2; j >= 0; j--)
- {
- file_string[3 * i + j + (i == 2 ? 1 : 0)]
- = r50toa(t % 050);
- t /= 050;
- }
- }
- return file_string;
- }
-
- /*
- Routine to print the name of an RT-11 file on the console.
- All rules as sprint_name apply here.
- */
-
- print_name(file_name)
- int *file_name;
- {
- char temp[11];
- puts(sprint_name(file_name,temp));
- }
-
- /*
- Routine to convert a radix 50 character into an ASCII character.
- The routine returns the character * if the rad 50 character is
- illegal.
- */
-
- r50toa(rad50)
- char rad50;
- {
- switch (rad50)
- {
- case 0: return ' ';
- case 033: return '$';
- case 034: return '.';
- }
- if (rad50-- <= 031) return rad50 + 'A';
- if ((rad50 -= 035) <= 9) return rad50 + '0';
- return '*';
- }
-